package com.sann.entity;

import lombok.Data;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;

/**通过@Component将Cat作为组件，在MainConfig上开启注解扫描(通过注解@ComponentScan扫进来)，就会将Cat注入IOC容器，至于是否
 * implements InitializingBean, DisposableBean 这个接口Bean没有半点关系，重写这两个接口Bean中的某些方法，只是起到给容器
 * 中注册的Cat这个Bean进行初始化和销毁之前做一些处理动作. 还有一种就是 implements BeanPostProcessor 这个，实现该接口的并不能自动注入IOC
 * 容器，还得通过@Component注解结合@ComponentScan扫进IOC，一旦扫进IOC容器，就会在初始化该Bean方法前后分别执行重写该接口的
 * postProcessBeforeInitialization() 和 postProcessAfterInitialization()方法*/
@Component
@Slf4j
@ToString
@Data
public class Cat implements InitializingBean, DisposableBean {

    private String name;
    private Integer age;

    public Cat(){
        log.info("Cat 构造函数被调用......");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        log.info("Cat InitializingBean#afterPropertiesSet 初始化方法被调用......");
    }

    @Override
    public void destroy() throws Exception {
        log.info("Cat DisposableBean#destroy 销毁方法被调用......");
    }


}
